let express = require("express");
let router = express.Router();
let { Comment } = require("../models/index");

/* 
发布评论
*/
router.post("/", function (req, res) {  
  
  // 创建一个新的评论记录
  Comment.create({  
    // 回复用户的ID（假设是发布评论的用户ID）  
    reply_user_id: req.auth.uid,  
    // 评论所属的文章ID  
    article_id: req.body.article_id,  
    // 评论的内容  
    content: req.body.content,  
  })   
  .then((r) => {  
    // 表示评论发布成功  
    res.json({  
      code: 1,
      msg: "发布评论成功",  
    });  
  })  
  .catch((err) => {  
    // 表示评论发布失败  
    res.json({  
      code: 0,
      msg: "发布评论失败",  
    });  
  });  
});


// // 发布一级评论
// router.post("/monkey-community/comment/publishComment", function (req, res) {
//   // 将请求体的内容解构
//   const replyId = req.auth.replyId;
//   const { communityArticleId, commentContent } = req.body;
//   // 得到当前评论时间
//   const createTime = new Date().toISOString().slice(0, 19).replace('T', ' ');
//   // 编写sql语句
//   const sql = 'INSERT INTO comment_article_comment (reply_id, community_article_id, comment_content, create_time) VALUES (?, ?, ?, ?)';
//   db.run(sql, [replyId, communityArticleId, commentContent, createTime], function (err) {
//     if (err) {
//       return res.json({ code: 500, msg: "发布评论失败" });
//     }
//     res.json({ code: 200, msg: "操作成功，请刷新页面或等待数据更新" });
//   });
});
/* 

根据文章id获取文章的评论列表
*/

router.get("/articles/:aid", function (req, res) {
  Comment.find({ article_id: req.params.aid })
    .populate("reply_user_id", { password: 0 })
    .then((r) => {
      res.json({
        code: 1,
        msg: "查询评论列表成功",
        data: r,
      });
    })
    .catch((err) => {
      res.json({
        code: 0,
        msg: "查询评论列表失败",
      });
    });
});

router.get("/monkey-community/comment/query/comment/:communityArticleId", function (req, res) {  
  const communityArticleId = req.params.communityArticleId;  
  // 查询评论  
  db.all(`SELECT * FROM communityComment WHERE community_article_id = ?`, [communityArticleId], function(err, comments) {  
    if (err) {  
      return res.json({  
        code: 500,  
        msg: "查询评论列表失败",  
      });  
    }  
  
    // 创建一个数组来存储填充了用户信息的评论  
    const commentList = [];  
  
    // 遍历评论并查询用户信息  
    comments.forEach((comment) => {  
      db.get(`SELECT username FROM user WHERE id = ?`, [comment.reply_user_id], function(err, user) {  
        if (err) {  
          // 错误处理，这里可能需要一个更复杂的逻辑来处理并发查询  
          console.error(err);  
          return;  
        }  
  
        // 填充用户信息到评论对象（仅示例用户名）  
        comment.username = user ? user.username : null;  
  
        // 添加到结果数组（注意：这里可能会遇到异步问题，需要处理）  
        commentList.push(comment);  
  
        // 如果这是最后一个评论，发送响应  
        if (commentList.length === comments.length) {  
          res.json({  
            code: 200,  
            msg: "操作成功，请刷新页面或等待数据更新",  
            data: commentList,  
          });  
        }  
      });  
    });  
  });  
});  


/* 
根据评论id删除评论
*/
router.delete("/:cid", async function (req, res) {
  //根据评论id找打对应的评论 --关联文章信息
  let commentObj = await Comment.findById(req.params.cid).populate(
    "article_id"
  );
  //   获取评论对应文章的作者
  let author_id = commentObj.article_id.author;

  //   /如果 评论文章的对应的作者 就是登录账号的话-说明具备删除权限
  if (author_id == req.auth.uid) {
    let r = await Comment.findByIdAndDelete(req.params.cid);
    if (r) {
      res.json({
        code: 1,
        msg: "删除评论成功",
      });
    } else {
      res.json({
        code: 0,
        msg: "删除评论-已经被删除",
      });
    }
  } else {
    res.json({
      code: 0,
      msg: "删除评论-没有权限",
    });
  }

  //
});


// 路由处理函数，用于处理删除评论的请求  
router.delete("/monkey-community/comment/deleteComment", (req, res) => {    
  try {    
    const commentId = req.params.comment_id;    
    // 获取当前登录用户id
    const loginId = req.auth.user_id;
  
    // 从comment_article_comment表中根据评论ID获取对应的community_article_id  
    db.get(`SELECT community_article_id FROM comment_article_comment WHERE id = ?`, [commentId], (err, row) => {    
      if (err) {    
        return res.status(500).json({ code: 500, msg: "内部错误" });    
      }    
      if (!row) {     
        return res.status(404).json({ code: 500, msg: "评论不存在" });    
      }    
  
      // 2. 查找文章以获取其作者ID  
      const communityArticleId = row.community_article_id;
      db.get(`SELECT user_id FROM articles WHERE id = ?`, [communityArticleId], (err, articleRow) => {    
        if (err) {    
          return res.status(500).json({ code: 200, msg: "内部错误" });    
        }    
        if (!articleRow) {    
          return res.status(404).json({ code: 200, msg: "关联的文章不存在" });    
        }    
  
        const authorId = articleRow.user_id;    
        // 检查作者ID是否与登录用户的ID匹配  
        if (authorId === loginId) {    
          // 如果匹配，删除评论   
          db.run(`DELETE FROM comments WHERE id = ?`, [commentId], (err) => {    
            if (err) {     
              return res.status(500).json({ code: 0, msg: "删除评论失败" });    
            }     
            res.json({ code: 200, msg: "操作成功，请刷新页面或等待数据更新" });    
          });    
        } else {     
          // 如果作者ID与登录用户的ID不匹配
          res.json({ code: 403, msg: "删除评论-没有权限" });    
        }    
      });    
    });    
  } catch (err) {    
    console.error(err);    
    res.status(500).json({ code: 0, msg: "内部错误" });    
  }    
});

module.exports = router;
